import axios from "axios";

// 创建axios实例
const service = axios.create({
  // axios中请求配置有baseURL选项，表示请求URL公共部分
  baseURL: portalConfig.gatewayUrl
  // 超时
  // timeout: 10000
});

// 请求拦截器
service.interceptors.request.use(
  async config => {
    // 每次发送请求之前判断vuex中是否存在token
    // 如果存在，则统一在http请求的header都加上token，这样后台根据token判断你的登录情况
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    // console.log("请求拦截");
    let token = Cookies.get("token");
    // //调试过期token
    if (!token || token === "undefined") {
      console.log("没有token或者为空 跳转页面!");
      // cookie中没有token则跳转空间基础信息平台登录页面
      tokenTool.jumpToLogin();
    } else {
      // 检测是否过期
      if (!tokenTool.isTokenOutTime(token)) {
        console.log("token过期!");
        // 过期通过refresh_token 获取新的token
        let refreshToken = Cookies.get("refreshToken");
        if (refreshToken) {
          console.log("开始用使用refreshToken请求");
          let obj = await tokenTool.getTokenByRefreshToken(refreshToken);
          console.log("赋值新token");
          token = obj.accessToken;
          Cookies.set("token", token, {
            expires: 1
          });
          Cookies.set("refreshToken", refreshToken, {
            expires: 1
          });
        } else {
          // cookie中没有refreshToken则跳转空间基础信息平台登录页面
          tokenTool.jumpToLogin();
        }
      }
    }
    // console.log("返回头部信息!");
    config.headers.Authorization = token;
    return config;
  },
  error => {
    return Promise.error(error);
  }
);
export default service;
